package com.lpf.other.对ForkJoin的优化;

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.LongStream;

import org.junit.Test;

/**
 * 求和
 */
@SuppressWarnings("ALL")
public class TestForkJoin {

	/**
	 * JDK8 之前的写法
	 */
	@Test
	public void test1() {
		long start = System.currentTimeMillis();

		ForkJoinPool pool = new ForkJoinPool();
		ForkJoinTask<Long> task = new ForkJoinCalculate(0L, 10000000000L);

		long sum = pool.invoke(task);
		System.out.println(sum);

		long end = System.currentTimeMillis();

		System.out.println("耗费的时间为: " + (end - start)); // 112-1953-1988-2654-2647-20663-113808
	}

	/**
	 * 普通的写法
	 */
	@Test
	public void test2() {
		long start = System.currentTimeMillis();

		long sum = 0L;
		for (long i = 0L; i <= 10000000000L; i++) {
			sum += i;
		}
		System.out.println(sum);

		long end = System.currentTimeMillis();
		System.out.println("耗费的时间为: " + (end - start)); // 34-3174-3132-4227-4223-31583
	}

	/**
	 * JDK8 的写法
	 */
	@Test
	public void test3() {
		long start = System.currentTimeMillis();

		Long sum = LongStream.rangeClosed(0L, 10000000000L).parallel().sum();
		System.out.println(sum);

		long end = System.currentTimeMillis();
		System.out.println("耗费的时间为: " + (end - start)); // 2061-2053-2086-18926
	}
}
